﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using webapp4U;
using System.Data.OleDb;

public partial class UserControl_ControlImportDKSHV2 : System.Web.UI.UserControl
{
    string strconn = webapp4U.Configuration.CurrentConnectionString;
    string error = "";
    ClassExecute.ClassExecute dt;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            chpreMonth.Text ="Check vào đây nếu bạn muốn cập nhật file dữ liệu cho tháng:" + DateTime.Now.AddMonths(-1).ToString("MM/yyyy");
            
        }

    }
    void ShowMessageBox(string text)
    {
        MessageBox.Text = text;
        MessageBox.ShowOnPageLoad = true;
    }
    bool CheckFileName(string filename)
    {
        dt = new ClassExecute.ClassExecute();

        string dtFileNameCopy = dt.GetDataDepend(strconn, "k_checkFileNameDulicated", CommandType.StoredProcedure,ref error,
                       new SqlParameter("@FileNameOrginaly", filename),
                       new SqlParameter("@SiteCode", "FM_00000003"),
                       new SqlParameter("@isPreMonth",chpreMonth.Checked));
            //step 1 kiểm tra file trùng file name

            if (dtFileNameCopy=="OK")
            {
                return true;
            }
            else 
            {
                return false;

            }
       
    }
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        dt = new ClassExecute.ClassExecute();

        try
        {     

            //check file browsed or not
            if (!fuUpload.HasFile)
            {
                ShowMessageBox("Bạn chưa chọn file để up load");
                return;
            }
            else
            {
                //step 1 kiểm tra file name
                bool BoolcheckFileName = CheckFileName(fuUpload.FileName);
                ViewState["FileName"] = fuUpload.FileName;
                if (BoolcheckFileName)
                {
                    //có file name trùng
                    MessageBoxFileDuplicate.ShowOnPageLoad = true;
                }
                else
                {
                    Step2();
                   
                }
            }
        }
        catch (Exception ex)
        {
            string method = System.Reflection.MethodBase.GetCurrentMethod().Name;
            dt.WriteErrorLog(Server.MapPath(webapp4U.Globals.LogUrl()), ex.Message, method);
        }
    }
    void Step2()
    {
        dt = new ClassExecute.ClassExecute();
        try
        {
            string OrdinaryFileName = ViewState["FileName"].ToString();
            //đưa file vào server
            fuUpload.SaveAs(webapp4U.Globals.PhysicalApplicationPath() + @"/UserUpload/UploadTempFileExcel/" + OrdinaryFileName);

            // Check Folder exists or not
            string YyyyMm = DateTime.Now.ToString("yyyyMM");
            if (chpreMonth.Checked)
            {
               YyyyMm= DateTime.Now.AddMonths(-1).ToString("yyyyMM");
            }
            else
            {
                YyyyMm = DateTime.Now.ToString("yyyyMM");
            }

            string pathFolder = webapp4U.Globals.PhysicalApplicationPath() + @"UserUpload/ImportedFileExcel/" + YyyyMm;
            DirectoryInfo dInfo = new DirectoryInfo(pathFolder);
            if (!dInfo.Exists)
            {
                dInfo.Create();
            }

            //Đổi tên file
            string fileNameDestination = webapp4U.Common.GetFileName() + "_" + OrdinaryFileName;

            //Move file to ImportedFileExcelYyyyMm        
            string filePathSource = webapp4U.Globals.PhysicalApplicationPath() + @"/UserUpload/UploadTempFileExcel/" + OrdinaryFileName;
            string filePathDes = pathFolder + @"/" + fileNameDestination;
            File.Move(filePathSource, filePathDes);

            //lưu biến tạm
            ViewState["Path"] = filePathDes;
           

            //import vào sql server table TempImportDKSH username
            Excel2Sql(ViewState["Path"].ToString(), fileNameDestination);

            
        }
        catch (Exception ex)
        {
            string method = System.Reflection.MethodBase.GetCurrentMethod().Name;
            dt.WriteErrorLog(Server.MapPath(webapp4U.Globals.LogUrl()), ex.Message, method);
        }
    }
    protected void btnOk_Click(object sender, EventArgs e)
    {
        //Vượt qua step 1,đi tới step 2 để kiểm tra nội dung file name  
        Step2();
        MessageBoxFileDuplicate.ShowOnPageLoad = false;
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        //Cancel luôn
        MessageBoxFileDuplicate.ShowOnPageLoad = false;
    }
    protected void btnImport_Click(object sender, EventArgs e)
    {

        if ((ViewState["FileName"] != null) || ViewState["FileName"].ToString() != "")
        {
            string kq = CheckIvalidData();

            if (kq == "Not")
            {

                ShowMessageBox("Bạn đã import thành công dữ liệu của DKSH");
               
            }
            else if (kq == "NotInMonth")
            {
                File.Delete(ViewState["Path"].ToString());
                if (chpreMonth.Checked)
                {
                    ShowMessageBox("Nội dung dữ liệu không nằm ở tháng:" + DateTime.Now.AddMonths(-1).ToString("MM/yyyy") + ",file excel này không thể input vào hệ thống và đã bị xóa,đề nghị bạn cập nhật lại đầy đủ trước khi import");
                }
                else
                {
                    ShowMessageBox("Nội dung dữ liệu không nằm ở tháng hiện hành,file excel này không thể input vào hệ thống và đã bị xóa,đề nghị bạn cập nhật lại đầy đủ trước khi import");
                }
            }
            else if (kq == "OK")
            {
                File.Delete(ViewState["Path"].ToString());
                ShowMessageBox("Nội dung dữ liệu không hợp lệ,file excel này không thể input vào hệ thống và đã bị xóa,đề nghị bạn cập nhật lại đầy đủ trước khi import");

            }
            ViewState["FileName"] = "";
        }
        else
        {
            ShowMessageBox("Đề nghị bạn chọn file excel và upload");
        }
    }
    void Excel2Sql(string path,string fileName)
    {
        dt = new ClassExecute.ClassExecute();
        OleDbConnection oconn=null ;
        try
        {
            bool kq = dt.ExecuteSQl_bool(strconn, CommandType.StoredProcedure, "[TTr_TempImportDKSH_Delete]", ref error,
                new SqlParameter("@UserName", Session["user"].ToString()));

            oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                path + ";Extended Properties=Excel 12.0;Persist Security Info=False;");


            string sql = "select KHO,MSVT,MKH,TENKH,DC,QHT,MAQUAN,CTYPE,LAND,INVOICE,NGAY,QTY";
            sql = sql + ",DGLE,TT,TTV,NGUYENGIA,'FM_00000003' as SiteCode,'" + fileName + "' as FileName,'" + Session["user"].ToString() + "' as UserImport from [DKSH$]";

                OleDbCommand ocmd = new OleDbCommand(sql, oconn);
                oconn.Open();
                OleDbDataAdapter da = new OleDbDataAdapter(ocmd);
                DataTable dbTest = new DataTable();
                da.Fill(dbTest);
                oconn.Close();

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strconn))
                {
                   
                        bulkCopy.BatchSize = 500;
                        bulkCopy.NotifyAfter = 1000;

                        bulkCopy.DestinationTableName = "dbo.TempImportDKSH" + Session["user"].ToString();
                        bulkCopy.WriteToServer(dbTest);
                   
                }

                ShowMessageBox("Bạn đã upload file thành công,đề nghị bạn nhấn nút import để cập nhật số liệu");
            }
            catch (DataException ex)
            {
               
                string method = System.Reflection.MethodBase.GetCurrentMethod().Name;
                dt.WriteErrorLog(Server.MapPath(webapp4U.Globals.LogUrl()), ex.Message, method);

            }
            finally
            {
                // Clean up.
                if (oconn != null)
                {
                    oconn.Close();
                    oconn.Dispose();
                }
            }
       
        
    }
    string CheckIvalidData()
    {
        //nếu check dữ liệu không có vấn đề gì thì import vào table invoiceDetail luôn --store TTr_TempImportDKSH_CheckInValid
        dt = new ClassExecute.ClassExecute();
        string i = "Not";
        try
        {
            i = dt.GetDataDepend(strconn, "[TTr_TempImportDKSH_CheckInValid]", CommandType.StoredProcedure, ref error,
                new SqlParameter("@UserName", Session["user"].ToString()),
                new SqlParameter("@OrdinaryFileName", ViewState["FileName"].ToString()),
                new SqlParameter("@isPreMonth",chpreMonth.Checked));
           
        }
        catch (Exception ex)
        {

            string method = System.Reflection.MethodBase.GetCurrentMethod().Name;
            dt.WriteErrorLog(Server.MapPath(webapp4U.Globals.LogUrl()), ex.Message, method);

        }
        return i;

    }
}